package fbv.gui;

import java.io.IOException;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import fbv.commun.dataTools.servico.ObjetoVO;
import fbv.commun.excecoes.FBVException;
import fbv.distribuidora.fornecedor.servico.Fornecedor;
import fbv.distribuidora.sistema.delegate.SistemaDelegate;
import fbv.distribuidora.sistema.servico.Sistema;

/**
 * Servlet implementation class for Servlet: ServletFornecedor *
 */
 public class ServletFornecedor extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   static final long serialVersionUID = 1L;

	private Map<String, String> dados;
	private Sistema sistema;

	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	public ServletFornecedor(){
		super();
	} 

	private void encaminharSolicitacao(HttpServletRequest request, HttpServletResponse response, String retorn){

		try {
			sistema = SistemaDelegate.getInstancia();

			String url = "/painelAdmin/principal.jsp?";

			if(retorn.equals("atualizar")){
				url += "pagina=3&subPagina=2";
			}
			else if(retorn.equals("excluir")){
				url += "pagina=3&subPagina=3";
			}
			else{
				url += "pagina=3&subPagina=5";
			}

			RequestDispatcher rd = getServletContext().getRequestDispatcher(url);
			ObjetoVO fornecedorVO;

			fornecedorVO = sistema.consultarFornecedor(request.getParameter("cod"));

			request.setAttribute(Fornecedor.FORM_FORNECEDOR_ID, fornecedorVO.getChave());
			request.setAttribute(Fornecedor.FORM_FORNECEDOR_RAZAO_SOCIAL, fornecedorVO.getPropriedade(Fornecedor.FORM_FORNECEDOR_RAZAO_SOCIAL));
			request.setAttribute(Fornecedor.FORM_FORNECEDOR_CNPJ, fornecedorVO.getPropriedade(Fornecedor.FORM_FORNECEDOR_CNPJ));
			request.setAttribute(Fornecedor.FORM_FORNECEDOR_ENDERECO_LOGRADOURO, fornecedorVO.getPropriedade(Fornecedor.FORM_FORNECEDOR_ENDERECO_LOGRADOURO));
			request.setAttribute(Fornecedor.FORM_FORNECEDOR_ENDERECO_NUMERO, fornecedorVO.getPropriedade(Fornecedor.FORM_FORNECEDOR_ENDERECO_NUMERO));
			request.setAttribute(Fornecedor.FORM_FORNECEDOR_ENDERECO_BAIRRO, fornecedorVO.getPropriedade(Fornecedor.FORM_FORNECEDOR_ENDERECO_BAIRRO));
			request.setAttribute(Fornecedor.FORM_FORNECEDOR_ENDERECO_CIDADE, fornecedorVO.getPropriedade(Fornecedor.FORM_FORNECEDOR_ENDERECO_CIDADE));
			request.setAttribute(Fornecedor.FORM_FORNECEDOR_ENDERECO_CEP, fornecedorVO.getPropriedade(Fornecedor.FORM_FORNECEDOR_ENDERECO_CEP));
			request.setAttribute(Fornecedor.FORM_FORNECEDOR_ENDERECO_UF, fornecedorVO.getPropriedade(Fornecedor.FORM_FORNECEDOR_ENDERECO_UF));


			rd.forward(request, response);
			
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FBVException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ServletException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		if(request.getParameter("opcao") != null){
			encaminharSolicitacao(request, response, request.getParameter("opcao"));
		}
		
		if(request.getParameter("acao") != null){
			if(request.getParameter("acao").equals("consultar")){
				try {
					sistema = SistemaDelegate.getInstancia();

					RequestDispatcher rd = getServletContext().getRequestDispatcher("/painelAdmin/principal.jsp?pagina=3&subPagina=4");
					Collection<ObjetoVO> fornecedoresVO;

					fornecedoresVO = sistema.consultarTodosFornecedores();

					request.setAttribute("fornecedores",fornecedoresVO);

					rd.forward(request, response);

				}catch (Exception e) {
					e.printStackTrace();
				}		
			}
		}	
	}  	

	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */

	private void getCampos(HttpServletRequest request){
		dados = new Hashtable<String, String>();

		dados.put(Fornecedor.FORM_FORNECEDOR_RAZAO_SOCIAL, request.getParameter(Fornecedor.FORM_FORNECEDOR_RAZAO_SOCIAL));
		dados.put(Fornecedor.FORM_FORNECEDOR_CNPJ, request.getParameter(Fornecedor.FORM_FORNECEDOR_CNPJ));
		dados.put(Fornecedor.FORM_FORNECEDOR_ENDERECO_LOGRADOURO, request.getParameter(Fornecedor.FORM_FORNECEDOR_ENDERECO_LOGRADOURO));
		dados.put(Fornecedor.FORM_FORNECEDOR_ENDERECO_BAIRRO, request.getParameter(Fornecedor.FORM_FORNECEDOR_ENDERECO_BAIRRO));
		dados.put(Fornecedor.FORM_FORNECEDOR_ENDERECO_CEP, request.getParameter(Fornecedor.FORM_FORNECEDOR_ENDERECO_CEP));
		dados.put(Fornecedor.FORM_FORNECEDOR_ENDERECO_CIDADE, request.getParameter(Fornecedor.FORM_FORNECEDOR_ENDERECO_CIDADE));
		dados.put(Fornecedor.FORM_FORNECEDOR_ENDERECO_NUMERO, request.getParameter(Fornecedor.FORM_FORNECEDOR_ENDERECO_NUMERO));
		dados.put(Fornecedor.FORM_FORNECEDOR_ENDERECO_UF, request.getParameter(Fornecedor.FORM_FORNECEDOR_ENDERECO_UF));		
	}	

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		sistema = SistemaDelegate.getInstancia();
		String acao = (String)request.getParameter(GuiPadrao.ACAO);
		String url = "ServletFornecedor?acao="; 
		
		if(acao != null)
		{
			try{
				if(acao.equals(GuiPadrao.ACAO_ADICIONAR)){
					getCampos(request);
					sistema.cadastrarFornecedor(dados);
					url = "/distribuidora/painelAdmin/principal.jsp?pagina=3&subPagina=1";
				}
				else if(acao.equals(GuiPadrao.ACAO_ALTERAR)){
					getCampos(request);
					dados.put(Fornecedor.FORM_FORNECEDOR_ID, request.getParameter(Fornecedor.FORM_FORNECEDOR_ID));
					sistema.alterarFornecedor(dados);
					url += "consultar";
				}
				else if(acao.equals(GuiPadrao.ACAO_CONSULTAR)){
					sistema.consultarFornecedor(request.getParameter(Fornecedor.FORM_FORNECEDOR_ID));
					url += "consultar";
				}

				else if(acao.equals(GuiPadrao.ACAO_EXCLUIR)){
					sistema.excluirFornecedor(Integer.parseInt(request.getParameter(Fornecedor.FORM_FORNECEDOR_ID)));
					url += "consultar";
				}
				response.sendRedirect(url);
			}
			catch (NumberFormatException e) {
				e.printStackTrace();
				response.sendRedirect(url);
			}	
			catch (FBVException e) {
				e.printStackTrace();
				response.sendRedirect(url);
			}
		}
	}    
}